/**
 * async/await 的 捕获错误的处理行数
 * @param { Promise } promise 传进去的请求函数
 * @param { Object } errorExt 拓展错误对象(错误提取)
 * @return { Promise } 返回一个Promise
 */
function to<T, U = Error>(
  promise: Promise<T>,
  errorExt?: object
): Promise<[U, undefined] | [null, T]> {
  return promise
    .then<[null, T]>((res: T) => [null, res])
    .catch<[U, undefined]>((err: U) => {
      if (errorExt) {
        const copyError = Object.assign({}, err, errorExt);
        return [copyError, undefined];
      }
      return [err, undefined];
    });
}
export default to;
